#pragma once
#include "mine_map.h"
#include <stdbool.h>

/**
 * @brief define status after click
 * BOOM Indicates thunder
 * UNALLOWED indicates that the behavior is not allowed
 * ALLOWED indicates that the lattice was successfully opened
 */
#define BOOM        0
#define UNALLOWED   1
#define ALLOWED     2

/**
 * @brief define Mouse Action
 *
 */
#define OPT_LEFT_CLICK  1
#define OPT_MID_CLICK   2
#define OPT_RIGTH_CLICK 3
#define OPT_TOTAL_CLICK 4
/**
 * @brief 用于数周围有多少个雷
 * 
 * @param map 
 * @param x 
 * @param y 
 * @return int 返回周围雷的数量
 */

/**
 * @brief 单次操作数据
 * 
 */
typedef struct 
{
    int x,y;
    int mode;
}opt_t;

/**
 * @brief 统计周围雷数量
 * 
 * @param map 
 * @param x 
 * @param y 
 * @return int 
 */
int opt_count(map *map, int x, int y);
/**
 * @brief 单次鼠标操作
 * 
 * @param m 地图
 * @param opt 操作数据，包含坐标，操作类型等信息
 * @return int 操作后状态
 */
int opt(map* m, opt_t opt);

/**
 * @brief 鼠标左击
 * 
 * @param x 
 * @param y 
 * @param m 指向地图的一个指针
 * @return int 当次操作状态
 */
int fnOptLeftClick(int x,int y,map *m);

/**
 * @brief 鼠标右击
 * 
 * @param x 
 * @param y 
 * @param m 指向地图的一个指针
 * @return int 当次操作状态
 */
int fnOptRightClick(int x,int y,map *m );

/**
 * @brief 鼠标中击
 * 
 * @param x 
 * @param y 
 * @param m 指向地图的一个指针
 * @return int 当次操作状态
 */
int fnOptMidClick(int x,int y,map *m);

/**
 * @brief 用于自动展开地图
 * 
 * @param x 
 * @param y 
 * @param m 地图指针
 */
int fnOptAuto(int x,int y, map *m);

/**
 * @brief 用于统计周围旗子数量
 * 
 * @param map 
 * @param x 
 * @param y 
 * @return int 旗子数量
 */
int opt_flag_count(map* map, int x, int y);

/**
 * @brief 用于判断是否扫雷成功
 * 
 * @param m 
 * @return true 
 * @return false 
 */
bool opt_is_scuess(map m);

/**
 * @brief 如果全部雷标记 打开剩余格子
 * 
 * @param m 
 * @return int 
 */
int fnTotalFlag(map *m);